#!/usr/bin/env python3
"""
清理测试管理相关数据的脚本
删除所有测试用例、测试套件、测试执行记录、测试计划、测试报告等数据
"""

import asyncio
import sys
import os
from motor.motor_asyncio import AsyncIOMotorClient

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from app.core.config import settings

async def clear_test_data():
    """清理所有测试管理相关数据"""
    client = None
    
    try:
        # 连接到MongoDB
        client = AsyncIOMotorClient(settings.MONGODB_URL)
        db = client[settings.MONGODB_DATABASE]
        
        print("开始清理测试管理相关数据...")
        
        # 删除测试用例执行记录
        execution_result = await db.test_case_executions.delete_many({})
        print(f"✅ 删除测试用例执行记录: {execution_result.deleted_count} 条")
        
        # 删除测试计划执行记录
        plan_execution_result = await db.test_plan_executions.delete_many({})
        print(f"✅ 删除测试计划执行记录: {plan_execution_result.deleted_count} 条")
        
        # 删除测试报告
        report_result = await db.test_reports.delete_many({})
        print(f"✅ 删除测试报告: {report_result.deleted_count} 条")
        
        # 删除测试计划
        plan_result = await db.test_plans.delete_many({})
        print(f"✅ 删除测试计划: {plan_result.deleted_count} 条")
        
        # 删除测试用例文件夹
        folder_result = await db.test_case_folders.delete_many({})
        print(f"✅ 删除测试用例文件夹: {folder_result.deleted_count} 条")
        
        # 删除测试用例
        test_case_result = await db.test_cases.delete_many({})
        print(f"✅ 删除测试用例: {test_case_result.deleted_count} 条")
        
        # 删除测试套件（旧数据，如果存在）
        suite_result = await db.test_suites.delete_many({})
        if suite_result.deleted_count > 0:
            print(f"✅ 删除测试套件（旧数据）: {suite_result.deleted_count} 条")
        
        print("\n✅ 所有测试管理相关数据已清理完成！")
        
        # 验证清理结果
        print("\n验证清理结果:")
        test_case_count = await db.test_cases.count_documents({})
        folder_count = await db.test_case_folders.count_documents({})
        plan_count = await db.test_plans.count_documents({})
        report_count = await db.test_reports.count_documents({})
        execution_count = await db.test_case_executions.count_documents({})
        plan_execution_count = await db.test_plan_executions.count_documents({})
        
        print(f"  测试用例: {test_case_count} 条")
        print(f"  测试用例文件夹: {folder_count} 条")
        print(f"  测试计划: {plan_count} 条")
        print(f"  测试报告: {report_count} 条")
        print(f"  测试用例执行记录: {execution_count} 条")
        print(f"  测试计划执行记录: {plan_execution_count} 条")
        
    except Exception as e:
        print(f"❌ 清理数据失败: {e}")
        import traceback
        traceback.print_exc()
    finally:
        # 关闭连接
        if client:
            await client.close()

if __name__ == "__main__":
    # 确认操作
    print("⚠️  警告：此操作将删除所有测试管理相关数据！")
    print("包括：测试用例、测试用例文件夹、测试计划、测试报告、执行记录等")
    confirm = input("确认继续？(yes/no): ")
    
    if confirm.lower() == "yes":
        asyncio.run(clear_test_data())
    else:
        print("操作已取消")

